package errors_test

import (
	"errors"
	"testing"

	"github.com/stretchr/testify/assert"
	err "gitverse.ru/dlc/similarity-compiler/pkg/errors"
)

var ErrDummy = errors.New("dummy")

func Test_GRPC(t *testing.T) {
	testCases := map[string]struct {
		code     err.ErrorType
		expected string
		input    error
	}{
		"Тест на получение ошибки internal server error": {
			code:     err.ErrInternalError,
			expected: "rpc error: code = Internal desc = dummy",
			input:    ErrDummy,
		},
		"Тест на получение ошибки invalid arguments": {
			code:     err.ErrInvalidArgs,
			expected: "rpc error: code = Internal desc = dummy",
			input:    ErrDummy,
		},
	}

	for name, test := range testCases {
		t.Run(name, func(t *testing.T) {
			errorCustom := err.NewWithError(test.input, test.code)
			value := err.GRPC(errorCustom)

			assert.Equal(t, test.expected, value.Error())
		})
	}
}

func Test_HTTPError(t *testing.T) {
	testCases := map[string]struct {
		value    int
		expected string
	}{
		"Тест на получение ошибки, которой нет в константах": {
			value:    10210,
			expected: "internal error",
		},
		"Тест на получение ошибки, которая есть в константах": {
			value:    400,
			expected: "invalid arguments",
		},
	}

	for name, test := range testCases {
		t.Run(name, func(t *testing.T) {
			httpError := err.ErrorTypeHTTP(test.value)

			assert.Equal(t, test.expected, httpError.Error())
		})
	}
}
